package com.frejoys.service;

import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.frejoys.common.dto.admin.UserWalletListDto;
import com.frejoys.common.dto.admin.UserWalletLogListDto;
import com.frejoys.common.dto.app.UserWalletLogDto;
import com.frejoys.common.dto.app.UserWalletLogPageDto;
import com.frejoys.common.dto.app.UserWalletLogTransferDto;
import com.frejoys.common.dto.common.IdDto;
import com.frejoys.common.dto.common.MoneyDto;
import com.frejoys.common.dto.common.PageDto;
import com.frejoys.common.vo.admin.UserWalletListLogVo;
import com.frejoys.common.vo.admin.UserWalletListVo;
import com.frejoys.common.vo.app.UserWalletLogDetailsVo;
import com.frejoys.common.vo.app.UserWalletLogListVo;
import com.frejoys.common.vo.app.UserWalletLogPageVo;
import com.frejoys.dao.entity.UserWalletLog;

import java.math.BigDecimal;
import java.util.List;

public interface UserWalletLogService extends IService<UserWalletLog> {

    default UserWalletLog getOnly(QueryWrapper<UserWalletLog> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    default UserWalletLog getOnly(LambdaQueryWrapper<UserWalletLog> wrapper) {
        wrapper.last("limit 1");
        return this.getOne(wrapper);
    }

    /**
     * 添加信息
     * @param userId
     * @param money
     * @param drawSn
     * @param type
     * @param createTime
     * @param status
     * @return
     */
    boolean addInfo(Long userId, BigDecimal money, Long drawSn, Integer type, Integer createTime, Integer status);


    /**
     * 获取消费记录
     * @return
     */

//    List<UserWalletLogListVo> userWalletListInfo(Long userId, PageDto dto);


    //后台分页查询用户提现信息
    Page<UserWalletLogPageVo> walletLogPage(UserWalletLogPageDto dto);

    // 用户申请提现
    boolean walletCash(Long userId, MoneyDto dto);

    // 后台审核用户提现
    boolean checkUserWalletLog(IdDto dto);

    //获取钱包消费记录记录
    // List<UserWalletLogListVo> userConsumptionWalletListInfo(Long userId, PageDto dto);

    //余额记录列表
    List<UserWalletLogListVo> userWalletRemainingSum(Long userId,UserWalletLogDto dto);

    //钱包记录
    List<UserWalletLogListVo> userWalletLogListInfo(Long userId, UserWalletLogDto dto,Integer start,Integer end);

    //钱包记录详情
    UserWalletLogDetailsVo userWalletLogDetails(IdDto dto);

    // 转入余额
    boolean transferWallet(Long userId, UserWalletLogTransferDto dto);

    //管理员查询用户钱包日志列表
    IPage<UserWalletListLogVo> walletLogList(UserWalletLogListDto dto);

    //删除钱包明细
    boolean deleteWalletLog(Long orderSn, Long userId, Integer type);

}
